#include "lru.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define HASHSIZE 6
static int lru[HASHSIZE] = {0};

/**
 * 函数：模拟LRU页面置换算法。
 *
 * @param queue_frames 一个字符串，表示页面访问序列。
 *                     字符串中的每个字符是一个数字，表示一个页面号。
 * @param num_frames   页框的数量，表示物理内存中可用的页框数。
 */
void
lru_page_replacement (char *queue_frames, int num)
{
  int *arr = malloc (num * sizeof (int));
  memset (arr, -1, num * sizeof (int));
  char *token = strtok (queue_frames, ",");
  int page, t = 1;
  while (token != NULL)
    {
      page = atoi (token);
      printf ("Access:%d,Frames: [", page);

      int i = 0, minium = 0;
      while (i < num) {
        if (arr[i] == page) {
          break;
        }
        minium = lru[arr[i]] < lru[arr[minium]] ? i : minium;
        i++;
      }

      if (i == num) {
        arr[minium] = page;
      }
      lru[page] = t;

      printf ("%d", arr[0]);
      for (int i = 1; i < num; i++)
        {
          printf (",%d", arr[i]);
        }
      printf ("]\n");
      token = strtok (NULL, ",");
      t++;
    }
  return;
}
